package com.rljk.utils;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.rljk.domain.common.PageData;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

/**
 @Function
 @Author 于泓磊
 @Date   2017年10月25日
*/
public class ToolsUtil {
	
	
	/**
	 * 获取文件上传表单中的参数，解决enctype不能传值的问题
	 * @Author 于泓磊
	 * @date   2017年10月24日
	 * @param req
	 * @param param
	 * @return
	 */
	@SuppressWarnings("unused")
	public static String getActionParam(HttpServletRequest req,String param){
		MultipartResolver resolver = new CommonsMultipartResolver(req.getSession().getServletContext());
		MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(req);
		MultipartFile multipartFile = multipartRequest.getFile("file1"); //得到上传的文件
		String entity = multipartRequest.getParameter(param);    // 得到值
		return entity;
	}
	
	
	
      
      /** 
       * 获取现在时间 
       * @return返回字符串格式yyyy-MM-dd HH:mm:ss
       */  
        public static String getStringDate() {  
               Date currentTime = new Date();  
               SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
               String dateString = formatter.format(currentTime);  
               return dateString;  
            }  
      /** 
       * 由年月日时分秒+3位随机数+用户名id后4位 
       * 生成订单流水号 
       * @return 
       */  
      public static String Getnum(String str){  
    	  Date currentTime = new Date();  
          SimpleDateFormat formatter = new SimpleDateFormat("yyMMddHHmmss");  
          String t = formatter.format(currentTime);  
          int x=(int)(Math.random()*900)+100;  
          str=str.substring(str.length()-4,str.length());
          String serial = t + x + str;  
          return serial;  
      } 
      
      
      /** 
       * 由年月日时分秒毫秒+3位随机数+用户名id后4位 
       * 生成酒店订单流水号 
       * @return 
       */  
      public static String GetHotelOrderID(String str){  
    	  Date currentTime = new Date();  
          SimpleDateFormat formatter = new SimpleDateFormat("yyMMddHHmmssSSS");  
          String t = formatter.format(currentTime);  
          int x=(int)(Math.random()*900)+100;  
          str=str.substring(str.length()-4,str.length());
          String serial = t + x + str;  
          return serial;  
      } 
      
      /**
       * 将数据库中的多文件属性转换为数组
       * @Author 于泓磊
       * @date   2017年11月23日
       * @param property  数据库属性
       * @param p         当前对象
       */
      public static void putImgstoArray(PageData p, String property){
    	  if(p.getString(property)!=null&&!"".equals(p.getString(property))){
    		  String s=(String) p.get(property);
    		  String[] split = s.split(",");
    		  p.put(property, split);
    	  }else {
    		  String[] split=new String[0];
			p.put(property, split);
		}
      }
      
      
      /**
       * 将Gson串转换为对象
       * @Author 于泓磊
       * @date   2017年12月11日
       * @param json
       * @param clazz
       * @return
       * @throws Exception
       */
      public static <T> List<T> fromJson(String json, Class<T> clazz) throws Exception { 
          List<T> lst =  new ArrayList<T>();        
          JsonArray array = new JsonParser().parse(json).getAsJsonArray();  
          for(final JsonElement elem : array){ 
	        lst.add(new Gson().fromJson(elem, clazz));       
	      }        
       return lst;    
   }
      
    	   
    	    /**
    	     * 根据经纬度和距离返回一个矩形范围
    	     * 
    	     * @param string
    	     *            经度
    	     * @param string2
    	     *            纬度
    	     * @param distance
    	     *            距离(单位为米)
    	     * @return [lng1,lat1, lng2,lat2] 矩形的左下角(lng1,lat1)和右上角(lng2,lat2)
    	     */ 
    	    public static double[] getRectangle(String string, String string2, long distance) { 
    	        float delta = 111000; 
    	         Double double1=Double.parseDouble(string);
    	         Double double2=Double.parseDouble(string2);
    	        if (double1 != 0 && double2 != 0) { 
    	            double lng1 = double1 - distance 
    	                    / Math.abs(Math.cos(Math.toRadians(double2)) * delta); 
    	            double lng2 = double1 + distance 
    	                    / Math.abs(Math.cos(Math.toRadians(double2)) * delta); 
    	            double lat1 = double2 - (distance / delta); 
    	            double lat2 = double2 + (distance / delta); 
    	            return new double[] { lng1, lat1, lng2, lat2 }; 
    	        } else { 
    	            // TODO ZHCH 等于0时的计算公式 
    	            double lng1 = double1 - distance / delta; 
    	            double lng2 = double1 + distance / delta; 
    	            double lat1 = double2 - (distance / delta); 
    	            double lat2 = double2 + (distance / delta); 
    	            return new double[] { lng1, lat1, lng2, lat2 }; 
    	        } 
    	    } 
    	   
    	    /**
    	     * 得到两点间的距离 米
    	     * 
    	     * @param lat1 第一点纬度
    	     * @param lng1 第一点经度
    	     * @param lat2 第二点纬度
    	     * @param lng2 第二点经度
    	     * @return
    	     */ 
    	    public static double getDistanceOfMeter(double lat1, double lng1, 
    	            double lat2, double lng2) { 
    	        double radLat1 = rad(lat1); 
    	        double radLat2 = rad(lat2); 
    	        double a = radLat1 - radLat2; 
    	        double b = rad(lng1) - rad(lng2); 
    	        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) 
    	                + Math.cos(radLat1) * Math.cos(radLat2) 
    	                * Math.pow(Math.sin(b / 2), 2))); 
    	        s = s * EARTH_RADIUS; 
    	        s = Math.round(s * 10000) / 10; 
    	        return s; 
    	    } 
    	       
    	    private static double rad(double d) { 
    	        return d * Math.PI / 180.0; 
    	    } 
    	   
    	    /**
    	     * 地球半径：6378.137KM
    	     */ 
    	    private static double EARTH_RADIUS = 6378.137;


	/**
	 *  生成不会重复的6位验证码
	 */
	public static String noRepeatCode(){
		return RandomStringUtils.random(6, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
	}

	public static void main(String[] args) {
		System.out.println(noRepeatCode());
	}

}
